package cl.gob.minvu.catastromobile;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import com.google.gson.Gson;

import cl.gob.minvu.catastromobile.entities.GrupoSecundario;
import cl.gob.minvu.catastromobile.util.GenericUtil;
import cl.gob.minvu.catastromobile.util.MyGrupoSecundarioAdapter;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;

/**
 * @author psep
 * 
 */
public class ListGrupoSecundarioActivity extends AbstractActivity {
	private ListView listGrupoSecundario;
	private GrupoSecundario grupoSecundario;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_list_grupo_secundario);
		super.session = super.getSharedPreferences(GenericUtil.SESSION,
				MODE_PRIVATE);
		this.listGrupoSecundario = (ListView) super
				.findViewById(R.id.listGrupo_secundario);

		this.onLoadSession();
		super.registerForContextMenu(this.listGrupoSecundario);
	}

	/**
	 * 
	 */
	private void onLoadSession() {
		String json = super.session.getString(GenericUtil.LIST_SECUNDARIO, null);
	
		if (json != null) {
			List<GrupoSecundario> grupos = Arrays.asList(new Gson().fromJson(json, GrupoSecundario[].class));
			MyGrupoSecundarioAdapter adapter = new MyGrupoSecundarioAdapter(
					this, grupos);
			this.listGrupoSecundario.setAdapter(adapter);
		}
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		AdapterContextMenuInfo aInfo = (AdapterContextMenuInfo) menuInfo;
		this.grupoSecundario = (GrupoSecundario) this.listGrupoSecundario
				.getAdapter().getItem(aInfo.position);

		menu.setHeaderTitle("Opciones");
		menu.add(1, 1, 1, "Modificar");
		menu.add(1, 2, 2, "Eliminar");
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		int itemId = item.getItemId();

		switch (itemId) {
		case 1:
			Editor edit = super.session.edit();
			edit.putString(GenericUtil.GRUPO_SECUNDARIO,
					new Gson().toJson(this.grupoSecundario));
			edit.commit();
			super.go(GrupoSecundarioActivity.class);
			break;

		case 2:
			MyGrupoSecundarioAdapter adapter = (MyGrupoSecundarioAdapter) this.listGrupoSecundario
					.getAdapter();
			List<GrupoSecundario> listaGrupo = adapter.getList();
			List<GrupoSecundario> listaGrupo2= new ArrayList<GrupoSecundario>();
			Iterator<GrupoSecundario> iter = listaGrupo.iterator();
			
			while (iter.hasNext()) {
				GrupoSecundario grupo = (GrupoSecundario) iter.next();
				
				if (grupo.run != this.grupoSecundario.run) {
					listaGrupo2.add(grupo);
				}
			}
			
			this.listGrupoSecundario.setAdapter(new MyGrupoSecundarioAdapter(this, listaGrupo2));
			
			break;

		default:
			break;
		}

		return true;
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.list_grupo_secundario, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();

		switch (id) {
		case R.id.listSecundario_frm_descartar:
			this.reset();
			return true;

		case R.id.listSecundario_frm_atras:
			super.go(FormActivity.class);
			finish();
			return true;

		default:
			return super.onOptionsItemSelected(item);
		}
	}
	
	/**
	 * @param key
	 */
	private void clearObjectSession(String key){
		Editor edit = super.session.edit();
		edit.remove(key);
		edit.commit();
	}

	/**
	 * @param button
	 */
	public void onClickAdd(View button) {
		this.clearObjectSession(GenericUtil.GRUPO_SECUNDARIO);
		this.grupoSecundario = null;
		super.go(GrupoSecundarioActivity.class);
	}

	/**
	 * @param button
	 */
	public void onClickSave(View button) {
		MyGrupoSecundarioAdapter adapter = (MyGrupoSecundarioAdapter) this.listGrupoSecundario
				.getAdapter();

		if (adapter == null) {
			this.reset();
		} else {
			List<GrupoSecundario> listaGrupo = adapter.getList();
			Editor edit = super.session.edit();
			edit.putString(GenericUtil.LIST_SECUNDARIO,
					new Gson().toJson(listaGrupo.toArray()));
			edit.commit();
		}

		super.go(FormActivity.class);
		finish();
	}

	@Override
	public void reset() {
		this.clearObjectSession(GenericUtil.LIST_SECUNDARIO);
		this.clearObjectSession(GenericUtil.GRUPO_SECUNDARIO);
		this.listGrupoSecundario.setAdapter(null);
	}

	@Override
	public boolean validateFrm() {
		return false;
	}
}
